#!/bin/bash
# 使用docker部署Flask应用 - 轻量化版本

# === 配置参数 ===
CONTAINER_NAME="flask-ticketing-app"
HOST_PORT="5000"
IMAGE_NAME="flask-ticketing:latest"

# PostgreSQL 数据库配置 - 必须设置
# 默认值仅用于示例，实际部署时请根据环境修改
DB_USER="postgres"
DB_PASSWORD="password"
DB_HOST="host.docker.internal"  # 连接宿主机上的PostgreSQL
DB_PORT="5432"
DB_NAME="ticketing_system"

# 构建 PostgreSQL 连接字符串
DATABASE_URL="postgresql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}"

# === 生成简化的Dockerfile（使用国内源）===
cat > Dockerfile << 'EOF'
# 使用标准Python Alpine镜像
FROM python:3.9-alpine

# 设置工作目录
WORKDIR /app

# 配置Alpine使用清华镜像源
RUN echo "配置清华Alpine镜像源"
RUN sed -i 's#https\?://dl-cdn.alpinelinux.org/alpine#https://mirrors.tuna.tsinghua.edu.cn/alpine#g' /etc/apk/repositories

# 更新Alpine包索引
RUN apk update

# 配置pip使用国内镜像源
ENV PIP_INDEX_URL=https://mirrors.aliyun.com/pypi/simple/
ENV PIP_TRUSTED_HOST=mirrors.aliyun.com

# 安装依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 复制代码
COPY . .

# 启动命令
CMD ["python", "app.py"]
EOF

# === 构建镜像 ===
echo "使用清华Alpine镜像源构建镜像..."
docker build -t "$IMAGE_NAME" . || {
  echo "构建失败，清理临时文件"
  rm -f Dockerfile
  exit 1
}

# === 清理旧容器并启动新容器 ===
docker rm -f "$CONTAINER_NAME" 2>/dev/null || true
docker run -d \
  --name "$CONTAINER_NAME" \
  -p "$HOST_PORT:5000" \
  -v "$(pwd)":/app \
  -e "DATABASE_URL=$DATABASE_URL" \
  --restart unless-stopped \
  "$IMAGE_NAME"

echo "已配置 PostgreSQL 数据库连接: postgresql://${DB_USER}:****@${DB_HOST}:${DB_PORT}/${DB_NAME}"

# === 验证启动状态 ===
if docker ps --filter "name=$CONTAINER_NAME" --format '{{.Names}}' | grep -q "$CONTAINER_NAME"; then
  echo "容器已启动! 访问地址: http://localhost:$HOST_PORT"
  rm -f Dockerfile
else
  echo "容器启动失败"
  docker logs "$CONTAINER_NAME"
  rm -f Dockerfile
  exit 1
fi